// #include <stdio.h>
// #include <stdlib.h>

//int main()
//{
    /*题目三十：期中考试开始了，大家都想取得好成绩，争夺前五名。
    从键盘输入n个学生成绩（不超过40个），输出每组排在前五高的成绩。
输入描述：
    两行，第一行输入一个整数，表示n个学生（>=5），第二行输入n个学生成绩
    （整数表示，范围0~100），用空格分隔。
输出描述：
    一行，输出成绩最高的前五个，用空格分隔。*/

    //方法一：自己写排序算法
    // int n = 0;    //多少名学生
    // scanf("%d", &n);    //第一行输入
    // int arr[40] = {0};    //创建一个数组，用于存放学生成绩

    // int i = 0;
    // for (i = 0; i < n; i++)
    // {
    //     scanf("%d", &arr[i]);    //第二行输入
    // }

    // /*冒泡排序，采用升序，最后五个元素就是最高的值*/
    // for (i = 0; i < n-1; i++)       //进行排序的躺数
    // {
    //     for (int j = 0; j < n-1-i; j++)     //一趟冒泡排序里面需要进行多少对元素比较
    //     {
    //         //两个相邻，且满足条件的数进行交换
    //         if (arr[j] > arr[j+1])
    //         {
    //             int tmp  = arr[j];
    //             arr[j]   = arr[j+1];
    //             arr[j+1] = tmp;
    //         }
    //     }
    // }
    // for (i=n-1; i>=n-5; i--)
    // {
    //     printf("%d\n" ,arr[i]);
    // }

    //return 0;
//}



/*比较函数一*/
// int compar(const void *e1, const void *e2)  //两个void*的指针，不能直接解引用
// {
//     //我们e1和e2指向需要排序的数组元素是整形的，所以我们把它转换成整形指针，然后再解引用
//     return *(int*)e1 - *(int*)e2;   //如果想要降序，用e2-e1;
// }


/*比较函数二*/
// int compar(const void *e1, const void *e2)  //两个void*的指针，不能直接解引用
// {
//     int *ee1 = (int *)e1, *ee2 = (int *)e2;

//     //如果想换成降序，就把ee1与ee2的位置调换过来。
//     if (*ee2 > *ee1)
//         return 1;
//     if (*ee2 == *ee1)
//         return 0; 
//     if (*ee2 < *ee1)
//         return -1;
// }

// int main()
// {
//     //方法二：使用C语言提供的库函数来进行排序
//     int n = 0;    //多少名学生
//     scanf("%d", &n);    //第一行输入
//     int arr[40] = {0};    //创建一个数组，用于存放学生成绩

//     int i = 0;
//     for (i = 0; i < n; i++)
//     {
//         scanf("%d", &arr[i]);    //第二行输入
//     }

//     //        数组开头的地址，数组中待排序的元素数量，每一元素的大小，函数指针
//     qsort(arr, n , 4, compar); 

//     for (i=n-1; i>=n-5; i--)
//     {
//         printf("%d " ,arr[i]);
//     }

//     return 0;
// }



/*题目三十一：假设你们社团要竞选社长，有两名候选人分别是A和B，社团每名同学必须
    并且只能投一票，最终得票多的人为社长.
输入描述：
    一行，字符序列，包含A或B，输入以字符0结束。
输出描述：
    一行，一个字符，A或B或E，输出A表示A得票数多，输出B表示B得票数多，
    输出E表示二人得票数相等。*/

// #include <stdio.h>

// int main()
// {
    /*版本一
    char buff[100] = {0};
    int count_A = 0;
    int count_B = 0;

    //输入一次获取完字符串，并且存到BUFF里面
    gets(buff);    //gets();比较危险，缓冲区容易溢出

    //计算
    int i = 0;
    while (buff[i] != 0)
    {
        if (buff[i] == 'A')
        {
            count_A++;
        }
        if (buff[i] == 'B')
        {
            count_B++;
        }
        i++;    //判断完就跳到下一个数字
    }
    //根据相应实际满足的条件进行输出
    if (count_A > count_B)
    {
        printf("A\n");
    }
    else if (count_A < count_B)
    {
        printf("B\n");
    }
    else
    {
        printf("E\n");
    }
    return 0;
    */


   /*版本二:定义一个标志位，判断标志位
    char buff[100] = {0};
    int flag = 0;   //定义一个标志位

    //输入一次获取完字符串，并且存到BUFF里面
    gets(buff);    //gets();比较危险，缓冲区容易溢出

    //计算
    int i = 0;
    while (buff[i] != 0)
    {
        if (buff[i] == 'A')
        {
            flag++;
        }
        if (buff[i] == 'B')
        {
            flag--;
        }
        i++;    //判断完就跳到下一个数字
    }
    //根据相应实际满足的条件进行输出
    if (flag > 0)
    {
        printf("A\n");
    }
    else if (flag < 0)
    {
        printf("B\n");
    }
    else
    {
        printf("E\n");
    }

    return 0;
    */


   /*版本三：一个字符一个字符读取，并且判断
    int ch = 0;
    int flag = 0;
   //输入
    while (((ch = getchar()) != '0') && ch != EOF)
    {
        if (ch == 'A')
        {
            flag++;
        }
        if (ch == 'B')
        {
            flag--;
        }
    }
    if (flag > 0)
    {
        printf("A\n");
    }
    else if (flag < 0)
    {
        printf("B\n");
    }
    else
    {
        printf("E\n");
    }*/
    
// }


/*题目三十二：据说智商140以上者称为天才，Kiki想知道他自己是不是天才，
    请帮他编程判断。输入一个整数表示一个人的智商，如果大于等于140，
    则表明他是一个天才，输出“Genius"。
输入描述：
    多组输入，每行输入包括一个整数表示的智商。
输出描述：
    针对每行输入，输出“Genius"。

#include <stdio.h>

int main()
{
    int iq = 0;
    // while (scanf("%d",&iq) != EOF)   //方法一
    while (~scanf("%d",&iq))    //EOF其实就是-1，而整数在计算机里面是已补码的形式
                                //存储的,而-1的补码全是1，取反后就为0.为假
    {
        if (iq > 140)
        {
            printf("Genius\n");
        }
    }
    
    return 0;
}
*/


/*题目三十三：KiKi想知道他的考试成绩是否完美，请帮他判断。
    从键盘输入一个整数表示的成绩，编程判断成绩是否在90~100之间，
    如果是则输出“Perfect”。
输入描述：
    多组输入，每行输入包括一个整数表示的成绩（90~100）。
输出描述：
    针对每行输入，输出“perfect"。

#include <stdio.h>

int main()
{
    int score = 0;
    while (~scanf("%d", &score))
    {
        if (score >= 90 && score <= 100)
        {
            printf("Perfect\n");
        }
    }
    return 0;
}
*/


/*题目三十四：KiK想知道一个整数的寄偶性，请帮他判断。从覆盟在意输入一个整数
    （范围-231~231-1），编程判断它的奇偶性。
输入描述：
    多组输入，每行输入包括一个整数。
输出描述：
    针对每行输入，输出该数是奇数（odd）还是偶数（Even）。
#include <stdio.h>
int main()
{
    int num = 0;
    while (scanf("%d",&num) != EOF)
    {
        if (num%2==1)
        {
            printf("Odd\n");
        }else
        {
            printf("Even\n");
        }   
    }
    return 0;
}
*/


/*三十五题：Kiki参加了语文、数学、外语的考试，请帮他判断三科中的最高分。
    从键盘任意输入三个整数表示的分数，编程判断其中的最高分。
输入描述：
    多组输入，每行输入包括三个整数表示的分数（0~100），用空格分隔。
输出描述：
    针对每行输入，输出为一行，即三个分数中的最高分。*/
/*方法一：*/
// #include <stdio.h>
// int main()
// {
//     int n1 = 0;
//     int n2 = 0;
//     int n3 = 0;

//     while(scanf("%d%d%d", &n1, &n2, &n3) !=EOF)
//     {
//         /*方法一：使用三目运算符来进行判断*/
//         // int Max = n1 > n2 ? n1 : n2;
//         // Max = Max > n3 ? Max : n3;
//         // printf("%d\n",Max);

//         /*方法二：使用if语句*/
//         int Max = 0;
//         if (n1 > n2)
//             Max = n1;
//         else
//             Max = n2;
//         if (Max > n3)

//             Max = Max;
//         else
//             Max = n3;
//         printf("%d\n",Max);
//     }

//     return 0;
// }


/*方法二：假设出最大值，然后逐个比较*/
// #include <stdio.h>
// int main()
// {
//     int num[3] = {0};
//     int Max = 0;
//     printf("请输要比较的总数：");
//     int n = 0;
//     scanf("%d",&n);

//     for (int i = 0; i < n; i++)
//     {
//         scanf("%d", &num[i]);    

//         //如果哟数字大于我设定的最大值，那么就赋值给最大值
//         if (num[i] > Max)
//         {
//             Max = num[i];
//         }
//     }
//     printf("最大值：%d\n",Max);

//     return 0;
// }


/*方法三：使用while()循环*/
// #include <stdio.h>
// int main()
// {
//     int num[3] = {0};
//     int Max = 0;

//     while (scanf("%d%d%d",&num[0],&num[1],&num[2]) != EOF)
//     {
//         for (int i = 0; i < 3; i++)
//         {
//             if (num[i] > Max)
//             {
//                 Max = num[i];
//             }
            
//         }
//         printf("%d\n",Max);
//     }
//     return 0;
// }


/*三十六题：Kiki开始学习英文字母，BoBo老师告诉他，有五个字母
    A（a），E（e），I（i），O（o），U（u）称为元音，其他所有字母称为辅音，
    请帮他编写程序判断输入的字母是元音（Vowel）还是辅音（Consonant）。
输入描述：
    多组输入，每行输入一个字母。
输出描述：
    针对每组输入，输出为一行，如果输入字母是元音（包括大小写），输出wVowe1"，
    如果输入字母是非元音，输出“Consonant"。*/

/*方法一：使用for循环*/
// #include <stdio.h>
// int main()
// {
//     int ch = 0;
//     char buf[] = "AaEeIiOoUu";  //也有这样初始化char buf[] = {"AaEeIiOoUu"};
//     while ((ch = getchar()) != EOF)
//     {
//         int i = 0;
//         for (i = 0; i < 10; i++)
//         {
//             if (ch == buf[i])
//             {
//                 printf("wVowel\n");
//                 break;
//             }
//         }
//         if (i == 10)    //把10个元音字母都比较了一遍，发现没有匹配的，就加到10了
//         {
//             printf("Consonant\n");
//         }
//         getchar();  //把A后面的\n读取掉
//     }

//     return 0;
// }


/*方法二：使用库函数strchr函数，在一串字符串里，找到指定的字符，然后返回它的地址位置*/
// #include <stdio.h>
// #include <stdlib.h>
// int main()
// {
//     int ch = 0;
//     char buf[] = "AaEeIiOoUu";  //也有这样初始化char buf[] = {"AaEeIiOoUu"};
//     while ((ch = getchar()) != EOF)
//     {   
//         //strchr是用来来判断ch获取到的值是不是buf里面的其中一个，如果是那么就为真。
//         //返回该元素的地址，否则返回NULL
//         if(strchr (buf, ch))    //如果为真，则就是找到了，就打印WVOwel
//         {
//             printf("wVowel\n");
//         }
//         else    //如果没有找到
//         {
//             printf("Consonant\n");
//         }
//         getchar();  //把A后面的\n读取掉
//     }

//     return 0;
// }


/*方法三：使用scanf来获取字符*/
// #include <stdio.h>
// #include <string.h>
// int main()
// {
//     char ch = 0;
//     char buf[] = "AaEeIiOoUu";  //也有这样初始化char buf[] = {"AaEeIiOoUu"};
//     // while (scanf("%c" ,&ch) != EOF)  //这样的话后面就要加一个getchar函数来消耗一个\n
//     /*在%c前面加上一个空格，会先消耗掉前面的一个空白字符，然后接着再读取一个字符*/
//     while (scanf(" %c" ,&ch) != EOF)
//     {   
//         //strchr是用来来判断ch获取到的值是不是buf里面的其中一个，如果是那么就为真。
//         //返回该元素的地址，否则返回NULL
//         if(strchr (buf, ch))    //如果为真，则就是找到了，就打印WVOwel
//         {
//             printf("wVowel\n");
//         }
//         else    //如果没有找到
//         {
//             printf("Consonant\n");
//         }
//         //前面%c加上一个空格后，这里的getchar就用不到了
//         // getchar();  //把A后面的\n读取掉
//     }

//     return 0;
// }


/*方法四：加入'\n'在下次输入的时候消除\n      这种方法不太行*/
// #include <stdio.h>
// #include <string.h>
// int main()
// {
//     char ch = 0;
//     char buf[] = "AaEeIiOoUu";  //也有这样初始化char buf[] = {"AaEeIiOoUu"};
//     /*在%c的后面给一个‘\n’,其实在输入的时候就会消化掉‘\n’这个字符
//     不会为下次留下空白的字符的隐患*/
//     while (scanf("%c\n" ,&ch) != EOF)
//     {   
//         //strchr是用来来判断ch获取到的值是不是buf里面的其中一个，如果是那么就为真。
//         //返回该元素的地址，否则返回NULL
//         if(strchr (buf, ch))    //如果为真，则就是找到了，就打印WVOwel
//         {
//             printf("wVowel\n");
//         }
//         else    //如果没有找到
//         {
//             printf("Consonant\n");
//         }
//     }
//     return 0;
// }


/*第三十七题：
    Kiki想判断输入的字符是不是字母，请帮他编实现。
输入描述：
    多组输入，每一行输入一个字符。
输出描述：
    针对每组输入，输出单独占一行，判断输入字符是否为字母，输出内容详见输出样例。*/
#include <stdio.h>
#include <ctype.h>
int main()
{
    char ch = 0;
    while (scanf(" %c",&ch) != EOF)
    {
        // if ((ch >= 'a'&& ch <= 'z')||(ch >= 'A'&& ch <= 'Z'))    //方法一
        /*isalpha函数是检查ch是否为英文字母,ch为英文字母,则返回 TRUE, 否则返回 NULL(0)*/
        if (isalpha(ch))   //方法二：使用库函数
        {
            printf("%c is an alphabet",ch);
        }else
        {
            printf("%c is not an alphabet",ch);
        }
    }
    return 0;
}